﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DAL
{
    public class DALClientes : DALBase
    {
        private static string cmdAltaCliente = "Insert into Clientes (CliNombre,CliApellido,CliDireccion,CiudadId,CliCorreo,CliSexo,CliFechaNacimiento,CliTelefono,CliUsuario) Values(@CliNombre,@CliApellido,@CliDireccion,@CiudadId,@CliCorreo,@CliSexo,@CliFechaNacimiento,@CliTelefono,@CliUsuario) select scope_identity()";
        private static string cmdAltaUsuario = "Insert into Usuarios (UsuNombre,UsuPassword,Rol) Values(@UsuNombre,@UsuPassword,@Rol) select scope_identity()";
        private static string cmdClientePorIdUsuario = "Select * From Clientes Where CliUsuario = @CliUsuario";
        private static string cmdModificarCliente = "update Clientes set CliNombre = @CliNombre ,CliApellido = @CliApellido ,CliDireccion = @CliDireccion ,CiudadId = @CiudadId ,CliCorreo = @CliCorreo ,CliSexo = @CliSexo ,CliFechaNacimiento = @CliFechaNacimiento ,CliTelefono = @CliTelefono where CliUsuario = @CliUsuario";
        private static string cmdModificarUsuario = "update Usuarios set UsuNombre = @UsuNombre,UsuPassword = @UsuPassword,Rol= @Rol where UsuId = @UsuId";
        private static string cmdBajaCliente = "delete from Clientes where CliUsuario = @CliUsuario";
        private static string cmdBajaUsuario = "delete from Usuarios where UsuId = @UsuId";


        public int BorrarCliente(List<SqlParameter> parametrosusu, List<SqlParameter> parametroscliente)
        {
            int idusu = -1;
            int idcli = -1;
            SqlConnection con = null;
            SqlTransaction trn = null;
            try
            {
                con = abrirConexion();
                trn = con.BeginTransaction();
                idusu = Convert.ToInt32(ejecutaNonQuery(cmdBajaUsuario, parametrosusu, con, trn, CommandType.Text));
                if (idusu > 0)
                {
                    idcli = Convert.ToInt32(ejecutaNonQuery(cmdBajaCliente, parametroscliente, con, trn, CommandType.Text));
                    if (idcli > 0)
                    {
                        trn.Commit();
                    }
                    else
                    {
                        throw new Exception();
                    }
                }
                else
                {
                    throw new Exception();
                }
            }
            catch (SqlException ex)
            {
                trn.Rollback();
            }
            catch (Exception e)
            {
                trn.Rollback();
            }
            finally
            {
                trn.Dispose();
                cerrarConexion(con);
            }
            return idusu;
        }

        public int AltaUsuario(Hashtable ht)
        {
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@CliNombre", ht["Nombre"]));
            parametros.Add(new SqlParameter("@CliApellido", ht["Apellido"]));
            parametros.Add(new SqlParameter("@CliDireccion", ht["ClienteDireccion"]));
            parametros.Add(new SqlParameter("@CiudadId", ht["ClienteCiudad"]));
            parametros.Add(new SqlParameter("@CliCorreo", ht["ClienteMail"]));
            parametros.Add(new SqlParameter("@CliSexo", ht["ClienteSexo"]));
            parametros.Add(new SqlParameter("@CliFechaNacimiento", ht["ClienteFechaNacimiento"]));
            parametros.Add(new SqlParameter("@CliTelefono", ht["ClienteTelefono"]));
            parametros.Add(new SqlParameter("@CliUsuario", ht["Usuario"]));

            return ejecutaNonQuery(cmdAltaCliente, parametros, CommandType.Text);
        }

        public int GuardarCliente(List<SqlParameter> parametrosusu, List<SqlParameter> parametroscliente)
        {
            int idusu = -1;
            int idcli = -1;
            SqlConnection con = null;
            SqlTransaction trn = null;
            try
            {
                con = abrirConexion();
                trn = con.BeginTransaction();
                idusu = Convert.ToInt32(ejecutaScalar(cmdAltaUsuario, parametrosusu, con, trn, CommandType.Text));
                if (idusu > 0)
                {
                    parametroscliente.Add(new SqlParameter("@CliUsuario", idusu));
                    idcli = Convert.ToInt32(ejecutaScalar(cmdAltaCliente, parametroscliente, con, trn, CommandType.Text));
                    if (idcli > 0)
                    {
                        trn.Commit();
                    }
                    else
                    {
                        throw new Exception();
                    }
                }
                else
                {
                    throw new Exception();
                }
            }
            catch (SqlException ex)
            {
                trn.Rollback();
            }
            catch (Exception e)
            {
                trn.Rollback();
            }
            finally
            {
                trn.Dispose();
                cerrarConexion(con);
            }
            return idusu;

        }

        public int ModificarCliente(List<SqlParameter> parametrosusu, List<SqlParameter> parametroscliente)
        {
            int idusu = -1;
            int idcli = -1;
            SqlConnection con = null;
            SqlTransaction trn = null;
            try
            {
                con = abrirConexion();
                trn = con.BeginTransaction();
                idusu = Convert.ToInt32(ejecutaNonQuery(cmdModificarUsuario, parametrosusu, con, trn, CommandType.Text));
                if (idusu > 0)
                {
                    idcli = Convert.ToInt32(ejecutaNonQuery(cmdModificarCliente, parametroscliente, con, trn, CommandType.Text));
                    if (idcli > 0)
                    {
                        trn.Commit();
                    }
                    else
                    {
                        throw new Exception();
                    }
                }
                else
                {
                    throw new Exception();
                }
            }
            catch (SqlException ex)
            {
                trn.Rollback();
            }
            catch (Exception e)
            {
                trn.Rollback();
            }
            finally
            {
                trn.Dispose();
                cerrarConexion(con);
            }
            return idusu;


        }

        public SqlDataReader BuscarCliente(int UsuId)
        {
            List<SqlParameter> lstparameters = new List<SqlParameter>();
            lstparameters.Add(new SqlParameter("@CliUsuario", UsuId));
            SqlDataReader dr = select(lstparameters, cmdClientePorIdUsuario, CommandType.Text);
            return dr;
        }
    }
}
